[Amiga][Down] [Scene] {}

[A-Files]

| A-Files: M.A.M.E. | A-Files: AmiGreet | A-Files: Installieren |




[Editorial]
[Inhalt]
[News]
[Hardware]
[Software]
[Workshop]
[Spiele]
[Specials]
[Feedback]
[Kontakt]
[Etc]

1000 mal installiert - 1000 mal is nix passiert.

So etwas ist auf dem Amiga keine Seltenheit und wird von uns eigentlich als Selbstverständlich hingenommen. Man bekommt ein lha-Archiv, entpackt es in die ram-disk und sieht sich einmal an was man da bekommen hat. Eine simple Struktur verschafft sofort Klarheit was bei einer Installation im System alles umgekrempelt wird. Als positives Beispiel nehmen wir einmal oben vorgestelltes AmiGreet. Unterverzeichnisse wie libs,devs, und c sollten jene Dateien enthalten welche später an genau derselben Stelle im System zu finden sein werden, wobei die ordentlich plazierten Icons einen wesentlichen Teil zur Übersichtlichkeit beitragen und erwarten lassen, daß das zugehörige Programm ebenso ordentlich und sauber programmiert wurde. Das zugehörige Installer-Script ist in ASCII geschrieben und sollte, ein wenig Verständniss vorausgesetzt, ohne Probleme lesbar sein. Sehen wir uns also die ersten Zeilen dieses Scripts an:

[Schoene Verzeichnisstruktur]


; AmiGreet  - v1.4 Install Script
;           - By Gareth 'Gaz' Murfin
;           - (11.12.97)

Zeilen beginnend mit einem Semikolon werden vom installer übersprungen und beinhalten meist Informationen über den Autor und die Version.


(set version "1.4")

In dieser Zeile wird der installer angeweisen die Versionsnummer des Programmes auf 1.4 zu setzten.

Als nächstes wird in ENV:AmiGreet nachgesehen ob eine Datei namens "Name" existiert und, so sie existiert, wird deren Inhalt mittels getenv in die Variable #who geschrieben.


(if (= (exists "ENV:AmiGreet/Name"))
 (set #who (getenv "AmiGreet/Name"))
)

Auf dieselbe Weise wird mit Country und Where verfahren.


(if (= (exists "ENV:AmiGreet/Country"))
 (set #country (getenv "AmiGreet/Country"))
)

(if (= (exists "ENV:AmiGreet/Where"))
 (set #where (getenv "AmiGreet/Where"))
)

Die nunfolgende Zeile übergibt nun den string "Hi " und die Variable #who der Variable #update. Wenn nun in ENV:Amigreet/Name der Name AmigaScene steht beinhalted die Variable #update danach die Zeichenfolge "Hi AmigaScene".


(
(set #update (cat 'Hi '#who''))
)

Dasselbe geschieht nun auch mit #details. \n bedeuted hier dasselbe wie in C, nämlich newline, den Beginn einer neuen Zeile.


(
(set #details (cat 'Country - '#country'\nSource - '#where'\nName - '#who''))
)

Damit ist die Festlegung der Variablen abgschlossen und das Intro beginnt. Ein Procedur mit dem Namen WAITX wir definiert, deren einziger Zweck darin besteht die folgende Textausgabe etwas zu bremsen um den Effeckt einer Laufschrift zu erzielen. Bremsend wirken auch die complete Anweisungen, welche eigentlich geschaffen wurden um dem Benutzer eine Angabe zum Fortschritt der Installation liefern zu können.


(procedure WAITX (set X 1) ( (while (< X 100) (set X (+ X 1)) ) ) )
(working "\n\n\n\n\n\n\n\n\n\n\n\n\nAmiGreet v1.4") (WAITX)
(complete 0)
(working "\n\n\n\n\n\n\n\n\n\n\n\nAmiGreet v1.4") (WAITX)
(complete 1)
(working "\n\n\n\n\n\n\n\n\n\n\nAmiGreet v1.4") (WAITX)
(complete 2)
(working "\n\n\n\n\n\n\n\n\n\nAmiGreet v1.4") (WAITX)
(complete 3)
(working "\n\n\n\n\n\n\n\n\nAmiGreet v1.4") (WAITX)
(complete 4)
(working "\n\n\n\n\n\n\n\nAmiGreet v1.4") (WAITX)
(complete 5)
(working "\n\n\n\n\n\n\nAmiGreet v1.4") (WAITX)
(complete 6)
(working "\n\n\n\n\n\nAmiGreet v1.4") (WAITX)
(complete 7)
(working "\n\n\n\n\nAmiGreet v1.4") (WAITX)
(complete 8)
(working "\n\n\n\nAmiGreet v1.4") (WAITX)
(complete 9)
(working "\n\n\nAmiGreet v1.4") (WAITX)
(complete 10)
(working "\n\nAmiGreet v1.4") (WAITX)
(complete 11)
(working "\n\nAmiGreet v1.4") (WAITX)
(complete 12)
(working "\nAmiGreet v1.4") (WAITX)
(complete 13)
(working "\nAmiGreet v1.4") (WAITX)
(complete 14)
(working "\nAmiGreet v1.4\n\n\n\n\n\n\n\n\n\n\n\nby") (WAITX)
(complete 15)
(working "\nAmiGreet v1.4\n\n\n\n\n\n\n\n\n\n\nby") (WAITX)
(complete 16)
(working "\nAmiGreet v1.4\n\n\n\n\n\n\n\n\n\nby") (WAITX)
(complete 17)
(working "\nAmiGreet v1.4\n\n\n\n\n\n\n\n\nby") (WAITX)
(complete 18)
(working "\nAmiGreet v1.4\n\n\n\n\n\n\n\nby") (WAITX)
(complete 19)
(working "\nAmiGreet v1.4\n\n\n\n\n\n\nby") (WAITX)
(complete 20)
(working "\nAmiGreet v1.4\n\n\n\n\n\nby") (WAITX)
(complete 21)
(working "\nAmiGreet v1.4\n\n\n\n\nby") (WAITX)
(complete 22)
(working "\nAmiGreet v1.4\n\n\n\nby") (WAITX)
(complete 22)
(working "\nAmiGreet v1.4\n\n\nby") (WAITX)
(complete 23)
(working "\nAmiGreet v1.4\n\n\nby") (WAITX)
(complete 24)
(working "\nAmiGreet v1.4\n\n\nby\n\n\n\n\n\n\n\n\nGareth Murfin.") (WAITX)
(complete 25)
(working "\nAmiGreet v1.4\n\n\nby\n\n\n\n\n\n\n\nGareth Murfin.") (WAITX)
(complete 26)
(working "\nAmiGreet v1.4\n\n\nby\n\n\n\n\n\n\nGareth Murfin.") (WAITX)
(complete 27)
(working "\nAmiGreet v1.4\n\n\nby\n\n\n\n\n\nGareth Murfin.") (WAITX)
(complete 28)
(working "\nAmiGreet v1.4\n\n\nby\n\n\n\n\nGareth Murfin.") (WAITX)
(complete 29)
(working "\nAmiGreet v1.4\n\n\nby\n\n\n\nGareth Murfin.") (WAITX)
(complete 30)
(working "\nAmiGreet v1.4\n\n\nby\n\n\nGareth Murfin.") (WAITX)
(message "\n\n\nAmiGreet v1.4\n\n\nby\n\n\nGareth Murfin.") (WAITX)

Zum Abschluss wird noch play16 aus dem Unterverzeichnis c aufgerufen und ihm mitgeteilt es möge bitte so net sein das Soundsample life.iff abzuspielen und sich anschließend wieder zu vertschüssen.


(run "c/play16 <>nil: c/life.iff")

Na also, Sound geht auch. Für die Einen ist es nur ein verspieltes Installer-script, für die Benutzer bunter Betriebssysteme wahrscheinlich ein multimediales Ereignis.

Nun endlich beginnt das eigentliche Installationsverfahren:


(welcome)

macht nix anderes als das wofür wir den Installer so lieben. Der Installer (wohlgemerkt der Installer alleine) checked die vorhanden Laufwerke, fragt nach dem Userlevel, ob wir nur so tun wollen als ob wir wirklich installieren wollen und ob ,und wenn ja, wohin mitprotokolliert werden soll. Genialerweise kann man hier Defaultwerte via Tooltypes vorgeben.

[Werte bequem per Tooltypes aendern]

Anschließend noch eine Welcome-message damit auch wirklich klar ist was man da gerade zu installieren im Begriff ist. Vollführt man kein Update existiert die Datei ENV:AmiGreet/Name natürlich noch nicht und die Variable #update ist folgedessen leer. Das "Hi AmigaScene" würde also ausbleiben.


(message
 #update
 "\n\nWelcome to AmiGreet v1.4\nBy Gareth Murfin."
 "\n\nThis installer will setup AmiGreet so that it will"
 "\nrun automatically on each bootup."
 "\n\nAny old versions of AmiGreet found will be deleted."
 "\n\neMail.........................gazy@globalnet.co.uk"
 "\nURL........http://www.users.globalnet.co.uk/~gazy/"
 "\nIRC................SpryNet.US.GalaxyNet.Org #AmIRC"
)
(complete 40)

Mit (complete 40) behaupted der Installer das die Installation zu 40% abgeschlossen sei.

Und dann passiert das:


(delete "SYS:WbStartup/AmiGreet" (all))
(delete "SYS:WbStartup/AmiGreet.info" (all))
(delete "SYS:WbStartup/AmiGreetUK" (all))
(delete "SYS:WbStartup/AmiGreetUK.info" (all))
(delete "SYS:WbStartup/AmiGreetDE" (all))
(delete "SYS:WbStartup/AmiGreetDE.info" (all))
(delete "SYS:WbStartup/AmiGreetPO" (all))
(delete "SYS:WbStartup/AmiGreetPO.info" (all))
(delete "SYS:WbStartup/AmiGreetNL" (all))
(delete "SYS:WbStartup/AmiGreetNL.info" (all))
(delete "SYS:WbStartup/AmiGreet?UK?" (all))
(delete "SYS:WbStartup/AmiGreet?UK?.info" (all))
(delete "SYS:WbStartup/AmiGreet?DE?" (all))
(delete "SYS:WbStartup/AmiGreet?DE?.info" (all))
(delete "SYS:WbStartup/AmiGreet?PO?" (all))
(delete "SYS:WbStartup/AmiGreet?PO?.info" (all))

Richtig, hier wurden die Reste möglicher älterer Installationen gesucht und gelöscht. Weil das so toll geklappt hat geben wir gleich wieder eine Message aus bei welcher endlich die Variable #details zum Zug kommt. #details ist ist bei einer Neuinstallation wiederum leer.


(message
"\n AmiGreet® is © by Gareth Murfin 1996-97"
"\n C< Alpha Software"
"\n\n\n"
"* AmiGreet Registration Details *"
"\n\n\n"
#details
)

(complete 42)

Jetzt wollen wir es aber genau wissen und lassen den User wählen wobei "English" mit (default 1) als Vorgabe gesetzt wird. Das Ergebnis dieser wahl wird in der Variable #DOC gespeichert. Mit (help (cat (@askoptions-help)) kümmert sich der Installer selbst um den Hilfetext.


(set #DOC
 (askoptions
  (prompt "Select version of AmiGreet to Install")
   (help (cat @askoptions-help))
    (default 1)
    (choices "English" "Polish" "German" "Dutch")
  )
)

Den Hilfetext kann man leicht erweitern indem man sich eine neue Variable definiert. Das sieht dann in der geänderten Version ungefähr so aus:


; #shelp wird definiert
(set #shelp
 ("\nHello Help!\n\n")
)

; und angewandt
(set #DOC
 (askoptions
  (prompt "Select version of AmiGreet to Install")
   (help #shelp (@askoptions-help))
    (default 1)
    (choices "English" "Polish" "German" "Dutch")
  )
)

"Hello Help!" wird nun, gefolgt von einer Leerzeile vor dem Hilfetext des Installers ausgegeben.

Und nun wird kopiert, gemäß der wahl des Benutzers,


(if (IN #DOC 0) (copyfiles (source "AmiGreetUK") (dest "SYS:WbStartup")))
(if (IN #DOC 0) (copyfiles (source "AmiGreetUK.info") (dest "SYS:WbStartup")))
;Copy UK AmiGreet & icon
(if (IN #DOC 1) (copyfiles (source "AmiGreetPO") (dest "SYS:WbStartup")))
(if (IN #DOC 1) (copyfiles (source "AmiGreetPO.info") (dest "SYS:WbStartup")))
;Copy Polish AmiGreet & icon
(if (IN #DOC 2) (copyfiles (source "AmiGreetDE") (dest "SYS:WbStartup")))
(if (IN #DOC 2) (copyfiles (source "AmiGreetDE.info") (dest "SYS:WbStartup")))
;Copy German AmiGreet & icon
(if (IN #DOC 3) (copyfiles (source "AmiGreetNL") (dest "SYS:WbStartup")))
(if (IN #DOC 3) (copyfiles (source "AmiGreetNL.info") (dest "SYS:WbStartup")))
;Copy Dutch AmiGreet & icon
(complete 50)

und weiterkopiert,


(complete 80)
(copyfiles
  (source "c/Say")
  (dest "C:")
  (all)
)

und weiterkopiert,


(complete 85)
(copyfiles
  (source "devs/narrator.device")
  (dest "DEVS:")
  (all)
)

und weiterkopiert,


(complete 90)
(copyfiles
  (source "libs/translator.library")
  (dest "LIBS:")
  (all)
)

und schließlich wird ein Directory in ENVARC: angelegt.


(makedir "ENVARC:AmiGreet")

Und weil�s wieder so toll war, gleich wieder eine Meldung.


(message
"\n\n AmiGreet is 'freeware' which means it is free to register. This installer will register you as an official AmiGreet user. All you have to do is fill in your details."
"\n\n\n\n AmiGreet * FREE * Registration"
)

Es folgt die Namensabfrage,


(set name
 (askstring
  (prompt "Please enter your full name.")
  (help @askstring-help)
 )
)

und das Speichern als text nach ENVARC:


(textfile
 (dest "ENVARC:AmiGreet/Name")
 (append name)
)

Das Ganze wird mit Country und Where wiederholt.


(set country
 (askstring
  (prompt "Please enter the name of country you live in.")
  (help @askstring-help)
 )
)

(textfile
 (dest "ENVARC:AmiGreet/Country")
 (append country)
)

(set where
 (askstring
  (prompt "Please enter where you obtained AmiGreet.")
  (help @askstring-help)
 )
)

(textfile
 (dest "ENVARC:AmiGreet/Where")
 (append where)
)

Und schon sind wir registriert und können nach dem nächsten Neustart unsere Daten aus ENV:AmiGreet auslesen.

Und weil`s schon wieder so toll war bringen wie gleich die Abschlussmeldung.


(complete 95)
(message
"\n\n AmiGreet v1.4 was installed successfully!"
"\n Reboot your Amiga to hear AmiGreet talk to you!"
"\n\n\n** Alpha Software - Contact details **"
"\n URL......http://www.users.globalnet.co.uk/~gazy/"
"\n eMail.......................gazy@globalnet.co.uk"
"\n IRC..............SpryNet.Us.GalaxyNet.Org #AmIRC"
"\n\n Enjoy AmiGreet v1.4..."
)
(complete 100)

Und aus. Hat das auch jeder kapiert?

Im Idealfall ist ein Installation am Amiga ein für den Benutzer transparenter Ablauf und nicht weiter spektakulär. Warum also soviel Wind darum machen? Ein Blick über den Zaun, dorthin wo gestrafte, menschliche Kreaturen versuchen ihr mühseliges Tagwerk mit Hilfe bunter Betriebsysteme zu verrichten, zeigt uns die gravierenden Mißstände welche dort Gleichenfeier halten.

Lädt man sich dort etwas aus dem Internet, bekommt man kein kleines Archiv, welches sich in eine saubere Verzeichnisstruktur entpackt, nein, man bekommt eine einzige exekutierbare Datei, welche nach ihrem Aufruf auch gleich munter damit beginnt dem ganzen System die sprichwörtlichen Wadeln nach vorne zu richten. Die Einbindung des Benutzers geschieht dabei eigentlich nur halbherzig und man hat immer das Gefühl, daß man nur gefragt wird damit man später die Schuld in die Schuhe geschoben bekommen kann, wenn wieder einmal nix mehr geht. Am schlimmsten ist wahrscheinlich die traurige Tatsache daß es sich bei solchen Systemsaboteuren nicht etwa um irgendwelche miesen Programme aus der Shareware-Ecke handelt, sondern sogar professionelle Software immer öfter das Kunststück vollbringt sich selbst mittels eines Updates zu eliminieren.

Auch De- und Reinstallationen helfen immer öfter nicht mehr und wen wunderts schon, wo man doch nach "kompletter" Deinstallation noch immer auffällige Spuren des Programmes findet. Registry-Einträge sind ja sowas von hartnäckig und undurchsichtig und die mannigfache Vielfalt die sich in so einem Betriebsystemverzeichnis befindet trägt auch nicht wirklich zum allgemeinen Verständniss bei. Wer kann schon wirklich sagen ob diese oder jene dll jetzt nach system, system32 oder doch ganz wo anders hin gehört. Selbst erfahrene Systemadministratoren gestehen immer öfter ein, nicht zu wissen, bzw gar nicht wissen zu wollen was da eigentlich genau abläuft.

Wähnen wir uns also glücklich. Mit der Zeit die wir uns beim Installieren sparen können wir ja ein paar wunderbare Torten backen und den Jungs nach Bruxelles zur Unterstützung schicken.

Stephan Bischoff ...........

 
[Up] .... {}